"""
文件上传下载功能
"""

import socket
import struct
import json

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = "127.0.0.1"
host = 8080
client.connect((ip, host))

# 发、收消息
while True:  # 通信循环
    # 1. 发命令
    cmd = input(f"[{ip}:{host}] >> ").strip()
    if not cmd:  # 客户端能发送空字符串，但是服务端不能接收空字符串
        continue
    if "exit" == cmd:
        break
    client.send(cmd.encode("utf-8"))
    # 2. 以写的方式打开文件，写入结果
    # 第1步: 先获取报头长度
    recv_header = client.recv(4)  # int有4个字节
    header_size = struct.unpack('i', recv_header)[0]
    # 第2步: 获取报头
    header_bytes = client.recv(header_size)
    # 第3步: 获取报头中的信息
    header_json = header_bytes.decode("utf-8")
    header_dict = json.loads(header_json)

    # 第4步: 接收数据
    total_size = header_dict["total_size"]
    filenem = header_dict["filename"]
    with open(filenem, 'wb') as f:
        recv_size = 0
        while recv_size < total_size:
            line = client.recv(1024)
            f.write(line)
            recv_size += len(line)
            print("#", end="")
    print("")

# 4. 关机
client.close()
